Move Inner to Upper Level Refactoring  

 

ÀÌ ¼½¼ÇÀº Move Inner to Upper Level ¸®ÆÑÅ丵 À§¿¡¼­ ´ç½Å¿¡°Ô Æ÷°ýÀûÀΠ overview¸¦ Á¦°øÇÏ°í  how ÀÌ ¸®ÆÑÅ丵ÀÌ IntelliJ IDEA¿¡¼­ »ç¿ëµÉ ¼ö Àִ°¡¸¦ Á¦°øÇÕ´Ï´Ù.

°³¿ä  


Move Inner to Upper  ¸®ÆÑÅ丵Àº »ç¿ëÀÚ¿¡°Ô ³»ºÎ Ŭ·¡½º¸¦ »óÀ§ ¼öÁØÀ¸·Î ¿Å±â´Â °ÍÀ» Çã¶ôÇÕ´Ï´Ù.  ±× °á°ú·Î, ³»ºÎ Ŭ·¡½º´Â ´õ ³ôÀº ¼öÁØÀ¸·Î,  ±×¸®°í ¸¸ÀÏ °á°úÀûÀΠŬ·¡½º°¡ ÃÖ°íÀÇ ¼öÁØ¿¡ ÀÖÀ¸¸é »õ·Î¿î ÆÄÀÏ¿¡ ¿Å°ÜÁý´Ï´Ù.  ¸ðµç »óÀÀÇÏ´Â ÂüÁ¶´Â ÀÚµ¿ÀûÀ¸·Î ¾÷µ¥ÀÌÆ®µË´Ï´Ù.


³»ºÎ Ŭ·¡½º°¡ Á¤ÀûÀÌ ¾Æ´Ï°í ¸Þ¼Òµå¿Í ¿ÜºÎ Ŭ·¡½ºÀÇ Çʵ忡 Á¢±ÙÀ» ÇÊ¿ä·Î ÇÒ °æ¿ì¿¡, ¿ÜºÎ Ŭ·¡½º ÀνºÅϽº´Â À̵¿ÇÏ´Â ³»ºÎ Ŭ·¡½ºÀÇ »ý¼ºÀÚ¿¡ ¸Å°³ º¯¼ö·Î¼­ ³Ñ¾î°¥ ¼ö ÀÖ½À´Ï´Ù.


¿¹¸¦ µé¸é, ¿ì¸®´Â ´ÙÀ½ Äڵ带 °¡Áý´Ï´Ù:

 
    public class OuterClass {
 
        public void foo() {
            //some code here
        }
 
        public class InnerClass {
            public void innerClassMethod() {
                foo();
            }
        }
    }


Moving Inner to Upper  ¸®ÆÑÅ丵 ÈÄ¿¡ OuterClass  ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ º¸ÀÏ °Í ÀÔ´Ï´Ù

 
    public class OuterClass {
        public void foo() {
            //some code here
        }
    }



±×¸®°í À̰ÍÀº InnerClass  ÀÔ´Ï´Ù (»õ·Î¿î ÆÄÀÏ¿¡¼­): 

 
    class InnerClass {
        private OuterClass outerClass;
 
        public InnerClass(OuterClass outerClass) {
            this.outerClass = outerClass;
        }
 
        public void innerClassMethod() {
            outerClass.foo();
        }
    }



³»ºÎ¿¡¼­ »óÀ§¼öÁØÀ¸·Î À̵¿


³»ºÎ Ŭ·¡½º¸¦ »óÀ§ ¼öÁØÀ¸·Î À̵¿Çϱâ À§ÇÏ¿©:

 1.   Project º¸±â¿¡¼­
 
³»ºÎ Ŭ·¡½º¸¦ ¼±ÅÃÇϰí Ŭ·¡½º ¸â¹ö¸¦ ¿À¸¥ÂÊ ¹öư Ŭ¸¯ÇÏ¿© ºÒ·ÁÁö´Â ÆË¾÷ ¸Þ´º¿¡¼­ Refactor Move... À» Ŭ¸¯ÇϽʽÿÀ.


´ç½ÅÀº Ŭ·¡½º¸¦ ¼±ÅÃÇϱâ À§ÇØ ¾î¶² ´Ù¸¥ º¸±â¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù, ¿¹¸¦ µé¸é Structure.


editor ¿¡¼­ : 
¿øÇϴ Ŭ·¡½º ¼±¾ð¿¡¼­ÀÇ Ä³·µÀ» ¹èÄ¡Çϰí ÁÖ ¸Þ´º¿¡¼­ ¶Ç´Â ¿¡µðÅÍ¿¡¼­ ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯ÇÏ´Â °Í¿¡ ÀÇÇØ ºÒ·ÁÁö´Â ÆË¾÷ ¸Þ´º ¿¡¼­ Refactor |  Move...¸¦ Ŭ¸¯ÇϽʽÿÀ.


´ç½ÅÀÌ Á¤ÀûÀÎ ³»ºÎ Ŭ·¡½º¸¦ ¿Å±â·Á°í Çϰí ÀÖÀ» ¶§, ¼±ÅÃÇÑ ³»ºÎ Ŭ·¡½º¸¦ À§ÇÑ ¸®ÆÑÅ丵À» ¼±ÅÃÇÏ¸é ´ç½ÅÀº ´ÙÀ½ÀÇ ´ÙÀ̾ó·Î±×¸¦ º¼ °ÍÀÔ´Ï´Ù:




¸¸ÀÏ ³»ºÎ Ŭ·¡½º°¡ ´Ù¸¥ Ŭ·¡½º·Î ¿Å°ÜÁö¸é  Move Members  ¸®ÆÑÅ丵À» º¸½Ê½Ã¿À.

 2.  Move Inner to Upper Level  ´ÙÀ̾ó·Î±×°¡ ³ªÅ¸³¯ °ÍÀÔ´Ï´Ù:

Ŭ·¡½º À̸§

 

ÀÌ ÅØ½ºÆ® Çʵ忡¼­ ´ç½ÅÀº ¼±Åà Ŭ·¡½ºÀÇ À̸§À» ÆíÁýÇÒ ¼ö Àְųª, ±âÁ¸ÀÇ Çϳª¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

¸Å°³ º¯¼ö·Î¼­ ¿ÜºÎ Ŭ·¡½ºÀÇ ÀνºÅϽº ³Ñ±â±â


ÀÌ Ã¼Å© ¹Ú½º°¡ ¼±ÅÃµÉ ¶§ Parameter name  ÅØ½ºÆ® Çʵå´Â »ç¿ë °¡´ÉÇÏ°Ô µÇ°í ´ç½ÅÀº ¿ÜºÎ Ŭ·¡½ºÀÇ ¸Å°³ º¯¼ö À̸§À» ÆíÁýÇÒ ¼ö Àְųª, IDEA¿¡ ÀÇÇØ Á¦¾ÈµÈ Çϳª¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
¸¸ÀÏ ÀÌ Ã¼Å© ¹Ú½º°¡ ¼±ÅõÇÁö ¾ÊÀ¸¸é ¼±ÅÃµÈ Å¬·¡½º´Â ´ÜÁö ·¹º§ ¾÷ ÇÏ¿© À̵¿µÇ°í »óÀÀÇÏ´Â ÂüÁ¶´Â ¾÷µ¥ÀÌÆ®µË´Ï´Ù.


¸¸ÀÏ ¿Å°ÜÁö´Â Ŭ·¡½º°¡ Á¤ÀûÀÎ °ÍÀ̶ó¸é ÀÌ Ã¼Å© ¹Ú½º´Â ºÒ°¡´ÉÇÏ°Ô ÇÏ°Ô µË´Ï´Ù.

º¯°æµÈ ¹Ì¸® º¸±â »ç¿ë


ÀÌ Ã¼Å© ¹Ú½º¸¦ ¼±ÅÃÇÏ¸é ´ç½ÅÀº ¾î¶² »ç¿ëÀÌ ¹ß°ßµÇ¾ú´ÂÁö ÃßÀûÇϰí, ±×µéÀÇ ±³Ã¼¸¦ ½ÂÀÎÇϵµ·Ï Çã¶ôÇÕ´Ï´Ù.  ÀÌ Ã¼Å© ¹Ú½º°¡ ¼±ÅõÇÁö ¾ÊÀ» ¶§, IDEA´Â ±³Ã¼ ±â´É¸¦ ÀÚµ¿ÀûÀ¸·Î ¼öÇàÇÕ´Ï´Ù.


½ÉÁö¾î üũ ¹Ú½º°¡ ¼±ÅõÇÁö ¾Ê¾ÒÀ» ¶§µµ, ¸¸ÀÏ ¹ß°ßµÈ »ç¿ëÀÌ ¾î¶² Àбâ Àü¿ë ÆÄÀÏ¿¡¼­ Á¸ÀçÇÏ¸é ±³Ã¼ »ç¿ëÀ» È®ÀÎÇÏ´Â ÇÁ·ÒÇÁÆ®°¡ ´ç½Å¿¡ ´ë±âµÉ °Í ÀÔ´Ï´Ù.


Refactoring Preview ´ÙÀ̾ó·Î±×¿¡¼­ (¸¸ÀÏ ±×°ÍÀÌ ³ªÅ¸³ª¸é) ´ç½ÅÀº ¼öÇàµÈ º¯°æÀ» ºÐ¼®ÇÒ ¼ö ÀÖ½À´Ï´Ù.  ¸®ÆÑÅ丵°ú ÇÔ²² ÁøÇàÇϱâ À§Çؼ­, Do Refactor¸¦ Ŭ¸¯ÇÕ´Ï´Ù±×·¸Áö ¾Ê´Ù¸é Cancel À» Ŭ¸¯ÇÕ´Ï´Ù. »ó¼¼ÇÑ °ÍÀ» º¸·Á¸é Refactoring Preview¸¦ º¸½Ê½Ã¿À.



 3.   OK¸¦ ´©¸¨´Ï´Ù, ±×¸®°í ¿øÇϴ Ŭ·¡½º´Â À̵¿µÉ °ÍÀÔ´Ï´Ù.